home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Id: qms.trm,v 1.6 1995/12/20 21:48:10 drd Exp $
- *
- */
-
- /* GNUPLOT - qms.trm */
- /*
- * Copyright (C) 1990 - 1993
- *
- * Permission to use, copy, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation.
- *
- * Permission to modify the software is granted, but not the right to
- * distribute the modified code. Modifications are to be distributed
- * as patches to released version.
- *
- * This software is provided "as is" without express or implied warranty.
- *
- * This file is included by ../term.c.
- *
- * This terminal driver supports:
- * QMS laser printers
- *
- * AUTHORS
- * Colin Kelley, Thomas Williams, Russell Lang
- *
- * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
- *
- */
- /*
- * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
- */
-
- #ifndef GOT_DRIVER_H
- #include "driver.h"
- #endif
-
- #ifdef TERM_REGISTER
- register_term(qms)
- #endif
-
- #ifdef TERM_PROTO
- TERM_PUBLIC void QMS_init __P((void));
- TERM_PUBLIC void QMS_graphics __P((void));
- TERM_PUBLIC void QMS_text __P((void));
- TERM_PUBLIC void QMS_linetype __P((int linetype));
- TERM_PUBLIC void QMS_move __P((unsigned int x, unsigned int y));
- TERM_PUBLIC void QMS_vector __P((unsigned int x2, unsigned int y2));
- TERM_PUBLIC void QMS_put_text __P((unsigned int x, unsigned int y, char str[]));
- TERM_PUBLIC void QMS_reset __P((void));
-
- #define QMS_XMAX 9000
- #define QMS_YMAX 6000
-
- #define QMS_XLAST (QMS_XMAX - 1)
- #define QMS_YLAST (QMS_YMAX - 1)
-
- #define QMS_VCHAR 120
- #define QMS_HCHAR 70
- #define QMS_VTIC 70
- #define QMS_HTIC 70
- #endif /* TERM_PROTO */
-
- #ifndef TERM_PROTO_ONLY
- #ifdef TERM_BODY
- int qms_line = 0; /* to remember current line type */
-
- TERM_PUBLIC void QMS_init()
- {
- /* This was just ^IOL, but at Rutgers at least we need some more stuff */
- fprintf(outfile,"^PY^-\n^IOL\n^ISYNTAX00000^F^IB11000^IJ00000^IT00000\n");
- /* ^ QUIC on ^set defaults ^ set botttom,top,left margins
- ^landscape ^free format */
- /* set defaults are: implicit decimal point, units in inches,
- numbers left justified, units in 1/1000 inch, do not ignore spaces */
- /* margins are in 1/1000 inch units */
- }
-
-
- TERM_PUBLIC void QMS_graphics()
- {
- fprintf(outfile,"^IGV\n");
- /* ^enter graphics vector mode */
- }
-
-
-
- TERM_PUBLIC void QMS_text()
- {
- /* added ^-, because ^, after an ^I command doesn't actually print a page */
- /* Did anybody try this code out? [uhh...-cdk] */
- fprintf(outfile,"^IGE\n^-^,");
- /* ^exit graphics vector mode
- ^pass terminator
- ^print page */
- }
-
-
- TERM_PUBLIC void QMS_linetype(linetype)
- int linetype;
- {
- static int width[2+9] = {7, 3, 3, 3, 3, 5, 5, 5, 7, 7, 7};
- static int type[2+9] = {0, 1, 0, 2, 3, 0, 2, 3, 0, 2, 3};
- /*
- * I don't know about Villanova, but on our printer, using ^V without
- * previously setting up a pattern crashes the microcode.
- * [nope, doesn't crash here. -cdk]
- * [it generates a controller error here on dotted lines. - rjl]
- */
- /* Code to define patterns added by rjl
- * According to the manual it should work - but it doesn't
- */
- qms_line = linetype;
- if (linetype >= 9)
- linetype %= 9;
- fprintf(outfile,"^PW%02d\n",width[linetype+2]);
- /* ^width in dots */
- switch (type[linetype+2]) {
- case 1 : /* short dash */
- fprintf(outfile,"^PV102025^G\n^V1\n");
- /* ^PV = define pattern vector, 1 = pattern number,
- 02 = number of pen downs and ups, 025 = .025" length of ups/downs */
- break;
- case 2 : /* medium dash */
- fprintf(outfile,"^PV202050^G\n^V2\n");
- break;
- case 3 : /* long dash */
- fprintf(outfile,"^PV302100^G\n^V3\n");
- break;
- default:
- case 0 :
- fprintf(outfile,"^V0\n");
- break;
- }
- }
-
-
- TERM_PUBLIC void QMS_move(x,y)
- unsigned int x,y;
- {
- fprintf(outfile,"^U%05d:%05d\n", 1000 + x, QMS_YLAST + 1000 - y);
- /* ^pen up vector*/
- }
-
-
- TERM_PUBLIC void QMS_vector(x2,y2)
- unsigned int x2,y2;
- {
- fprintf(outfile,"^D%05d:%05d\n", 1000 + x2, QMS_YLAST + 1000 - y2);
- /* ^pen down vector*/
- }
-
-
- TERM_PUBLIC void QMS_put_text(x,y,str)
- unsigned int x,y;
- char str[];
- {
- char ch;
- QMS_move(x,y + QMS_VCHAR/3);
- fputs("^IGE\n",outfile);
- ch = *str++;
- while(ch!='\0') {
- if (ch=='^')
- putc('^',outfile);
- putc(ch,outfile);
- ch = *str++;
- }
- fputs("\n^IGV\n",outfile);
- QMS_linetype(qms_line); /* restore line type */
- }
-
-
- TERM_PUBLIC void QMS_reset()
- {
- fprintf(outfile,"^PN^-\n");
- /* ^QUIC off*/
- }
-
- #endif /* TERM_BODY */
-
- #ifdef TERM_TABLE
-
- TERM_TABLE_START(qms_driver)
- "qms", "QMS/QUIC Laser printer (also Talaris 1200 and others)",
- QMS_XMAX,QMS_YMAX, QMS_VCHAR, QMS_HCHAR,
- QMS_VTIC, QMS_HTIC, options_null, QMS_init,QMS_reset,
- QMS_text, null_scale, QMS_graphics, QMS_move, QMS_vector,
- QMS_linetype,QMS_put_text, null_text_angle,
- null_justify_text, line_and_point, do_arrow, set_font_null
- TERM_TABLE_END(qms_driver)
-
- #undef LAST_TERM
- #define LAST_TERM qms_driver
-
- #endif /* TERM_TABLE */
- #endif /* TERM_PROTO_ONLY */
-
- /*
- * NAME: qms
- *
- * OPTIONS: none
- *
- * SUPPORTS: QMS/QUIC Laser printer (also Talaris 1200 and others)
- *
- * Further Info: none. Who was Talaris?
- *
- */